#define _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>

//函数自身为什么能够调用自身

//函数的调用
//·当在一个函数的运行期间调用另一个函数时，在运行被调函数之前，系统需要完成3件事：
//		1.将所有的实际参数，返回地址等信息传递给被调函数保存
//		2.为被调函数的局部变量（也包括形参）分配存储空间
//		3.将控制转移到被调函数的入口
//
//·从被调函数返回主调函数之前，系统也要完成3件事：
//		1.保存被调函数的返回结果
//		2.释放被调函数所占的存储空间
//		3.依照被调函数保存的返回地址将控制转移到调用函数
//
//·当有多个函数相互调用时，按照“后调用先返回”的原则，上述函数之间信息传递和控制转移必须借助“栈”来实现
//	即系统将整个程序运行时所需的数据空间安排在一个栈中：
//		每当调用一个函数时，就在栈顶分配一个存储区，进行压栈操作
//		每当退出一个函数时，就释放它的存储区，进行出栈操作
//		当前运行的函数永远都在栈顶位置
//
//·A函数调用A函数和A函数调用B函数在计算机看来是没有任何区别的，只是用我们日常的思维方式去理解会有些怪异而已
//

//函数声明
int g(int);

int f(int n)
{
	n = g(n);

	return n;
}

int g(int m)
{
	m *= 2;

	return m;
}

int main(void)
{
	//思考printf语句最终的输出值实施多少？主要理解不同函数之间的调用关系

	int val = 0;
	val = f(5);
	printf("val = %d\n", val);

	return 0;
}